package com.cn.wanxi.util;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.io.File;
import java.io.IOException;

/**
 *
 */
public class MyHelp {
    /**
     * 2021-9-8
     * 1.下载mysql 安装
     * 2.下载mysql 安装图形化管理工具  workbench  Navicat  sqlyog
     * CREATE SCHEMA `canyin` ;
     * -- 创建数据库
     * # 注释
     * create database `user`;
     * -- 这两个点 表示  区分关键字
     * -- tables 表
     * -- views  视图 临时表 对象（封装）
     * -- stored procedures  存储过程  （定义类，属性，方法）
     * -- functions 方法  触发器
     * -- 对于数据有没有删除？修改数据库
     * drop SCHEMA `canyin` ;
     * -- mysql是否区分大小写？
     * -- io流的路径是否区分大小写？
     * use  `canyin` ; -- 选择使用的数据库
     * -- ---------------创建表---------------------------
     * -- 数据库也是一门编程语言
     * -- 要去创建对象的时候？
     * -- 理解表对象的属性（字段）？
     * -- 模型
     * -- 概念模型  我们需要将实体描述到需求文档里面 给客户看？ 图形
     * --  需求文档 设计文档  原型设计（ui设计师，web去看） 开发文档  接口文档（架构师设计）（程序员实现）
     * --  类与类之间的关系？这种图 在上面文档里面？开发文档
     * -- 一般用rose   powerdesigner设计
     * -- 先有概念建模 物理建模（Java程序员）   逻辑建模（数据库工程师）  (会议，定义标准)
     * -- 逻辑建模
     * -- 根据Java 物理建模来创建表
     * -- 表对应Java对象  表名对应Java类名
     * -- 表名如果有几个单词 用下划线 company_model
     * -- engine  存储引擎 innodb 支持事务
     * -- mysql的存储引擎myisam和innodb的区别?
     * -- 创建表的时候需要注意什么问题？需要遵循什么原则？
     * -- 第一范式：创建字段的时候应该按照最小原则去  举例：地址 有可能为公司地址，家庭地址  ，别墅地址  就应该分为三列
     * -- 第二范式：有主键 （唯一）也叫索引
     * -- 第三范式：自己的列不存在依赖关系（不要用外键相关联）
     * -- --------------------
     * -- 五大约束： 有主键 pk  唯一  unique  非空  默认 外键约束
     */
    /**
     * 2021-9-9
     * -- 每一个表必须有id，UUID（必须要有主键）
     * -- id  主键 create_time 创建时间  update_time更新时间  enable是否启用   remark  备注   status  状态
     * -- int  对应的是Java的int
     * -- 数据库整型  tinyint  smallint  int   mediumint  BIGINT
     * -- id 主键要自增 数据类型应该写什么？ int   如果数据操作频率不是很高，则可以不用考虑分库分表
     * -- VARCHAR(255)  char(255) 两者之间区别？什么时候用char？什么时候用varchar  255代表的是可以存放255个字符  tinyint(4)
     * -- 如果长度基本固定  则直接用char
     * -- 速度快  char
     * -- 数组  集合？ 考察的是新增和删除 和查询 效率
     * -- DATETIME 和 TIMESTAMP的区别？
     * -- float  double
     * -- 对于金钱  不能用浮点型  Java BigDecimal  数据库 decimal DECIMAL(5,3) 5代表5个有效数字，3代表小数的位数 0.001  99.999
     * -- char（128）  varchar（63355）（汉字  3）    text（纯文本，）  什么时候用？ text有没有最大值？
     * -- 什么时候用字节流/字符流？只要用记事本打开可以看懂不是乱码就用字符流   缓冲流
     * DROP TABLE `myuser`; -- 删除表
     *
     * CREATE TABLE `canyin04`.`myuser` (
     *   `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键自增',
     *   `username` VARCHAR(45) NULL,
     *   `password` CHAR(45) NULL,
     *   `sex` CHAR(2) ,
     *   `phone` CHAR(11),
     *   `create_time` TIMESTAMP(6) NULL,
     *   `birthday` DATETIME nulL,
     *   PRIMARY KEY (`id`),
     *   UNIQUE INDEX `username_UNIQUE` (`username` ASC));
     * INSERT INTO `myuser` (`username`) VALUES ('dd');
     * INSERT INTO `myuser` (`username`, `password`,  `phone`, `create_time`, `birthday`)
     *  VALUES ('a',  'a','a', now(), '2021-2-2');
     *
     *  INSERT INTO `myuser`
     *  VALUES (null,'aaa','a',  '男','a', now(), '2021-2-2',1);
     *  INSERT INTO `myuser` (`username`, `password`,  `phone`, `birthday`)
     *  VALUES ('rewqrew',  'a','a', '2021-2-2');
     *  --  修改列 默认系统时间
     *  ALTER TABLE `canyin04`.`myuser`
     *  CHANGE COLUMN `sex` `sex` CHAR(1) NULL DEFAULT '男' ,
     * CHANGE COLUMN `create_time` `create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP;
     *
     *
     *
     * ALTER TABLE `myuser`
     * CHANGE COLUMN `sex` `sex` CHAR(2) NULL DEFAULT NULL ,
     * CHANGE COLUMN `phone` `phone` CHAR(11) NULL DEFAULT NULL ,
     * CHANGE COLUMN `birthday` `birthday` DATETIME NULL DEFAULT NULL ;
     * -- 取得系统时间？
     * select now();
     * select sysdate() as sysdate;
     * DELETE FROM `myuser` WHERE (`id` = '11');
     * DELETE FROM `myuser` WHERE (`id` = '12');
     * -- delete 删除后会留下记录 只是删除数据不让你看，数据依然存在
     * -- 如何把数据彻底删除？
     * truncate `myuser`;-- 删除表里面的所有内容，不能恢复
     * DROP TABLE `myuser`;  -- 删除表结构
     * -- ------------------------------
     * -- 以后不存在delete 以后在新公司不要用delete  更不要用truncate 绝对不要用 drop
     * -- 物理删除  逻辑删除 update
     * UPDATE `canyin04`.`myuser` SET `enable` = '1' WHERE (`id` = '1');
     * -- 表关系  一对一  一对多  多对多  多对一
     *
     * -- 要学会给别人数据库访问权限设置？
     * -- 要学会导入导出数据？
     */
    /**
     * 2021-9-13  做后台管理系统：
     *  1.后台系统更新数据，
     *  2.在前端页面可以正常展示,
     *  3.所有数据来源于数据库
     *-------------------------------------
     * 1.做页面    js 需要将数据传递到后台   ajax  （最好js，css，html相分离）
     * 1.5 写model 定义对象属性
     * 2. 写servlet
     * 3.写service
     * 4.dao
     * 5.JDBC
     * --------------------------------
     * 登录，手写jdbc，验证码
     * 后台需要验证码传递到前端 不能直接以字符串的形式进行传递
     * 这里只能传递一张图片到前端----将图片以io流的形式传递到前端
     *预习：js基础
     *
     */
    /**
     * 2021-9-14
     * servlet 里面需要写哪些代码？
     * 1.乱码处理
     * 2.得到前端传递过来的数据
     * 3.封装对象model
     * 4.跳转service层，得到返回值对象
     * 5.将返回值对象传递给前端（json对象）
     * --------------------------
     * service  所有逻辑层代码
     * 1. 写逻辑代码
     * 2.返回页面需要的结果对象
     *
     */
    /**
     * 2021-9-15
     * 后台代码编写
     * 1.servlet  所有对象六个默认方法实现
     * 2.service   逻辑判断（新增和修改）
     * 3.dao sql语句编写
     * -------------------
     * 学会基类
     *
     */
    /**
     * 2021-9-16
     * postman 测试接口
     * 原生分页（熟悉逻辑）--字符串拼接  ajax
     * layui的数据查询--接口返回code必须为0
     * 操作栏
     */
    /**
     * 2021-9-17
     * 分页：默认情况下layui会传递一个page和limit；
     * 添加：表单--验证输入是否正确
     * 复选框取值
     * 数字转换位字符串
     * 字体图标的应用
     * templet 模板
     */
    /**
     * 2021-9-18
     * 编辑
     * 根据id查询数据并展示（刷新表单）
     * 单选复选赋值
     * 删除
     * 模糊查询 sql语句编写 isnull(enable)， like
     *
     */
    /**
     * 2021-9-22
     * 状态停用和启用
     * sql语句的判断
     * 模糊查询 find_in_set  注意：or需要有括号
     * 返回值需要多个值：1.创建对象 2.map
     * ---------------------
     * 正常情况下，你们的CURD应该做完？
     * 前端页面布局应该全部做完？
     * -------------------------
     * 1.复制页面
     * 2.js代码
     * 后台：1.servlet  2.service  3.dao
     */
    /**
     * 2021-9-23
     * 查询菜系 -- 注意：刷新表单
     * 图片上传
     * 1.js 复制js代码
     * 2.servlet 代码
     *      1）写注释
     *      2）路径的获取
     *      3）文件的读和写
     *      4）暂时需要将文件写入到out文件里面
     * 3.需要预览：
     */
    /**
     * 2021-9-24
     * 富文本
     * 1.<textarea id="demo" style="display: none;"></textarea>
     * <script>
     * layui.use('layedit', function(){
     *   var layedit = layui.layedit;
     *   layedit.build('demo'); //建立编辑器
     * });
     * </script>
     * 2.设置图片上传
     * layedit.set({
     *   uploadImage: {
     *     url: '' //接口url
     *     ,type: '' //默认post
     *   }
     * });
     * 3.规定返回格式
     * {
     *   "code": 0 //0表示成功，其它失败
     *   ,"msg": "" //提示信息 //一般上传失败后返回
     *   ,"data": {
     *     "src": "图片路径"
     *     ,"title": "图片名称" //可选
     *   }
     * }
     * 4.取值：data.content=layedit.getContent(layuiObject);
     * 5.赋值： layedit.setContent(layuiObject,data.content);注意：刷新表单form.render();
     *
     */
    /**
     * 2021-10-8
     * 过滤器：
     * 前端：
     *      将登录状态保存
     *           sessionStorage.setItem("username", username);//存在内存
     *      判断是否已经登录
     *          $(function(){
     *  let username=sessionStorage.getItem("username");
     *  if(username==null){
     *   window.open("/html/login.html");
     *  }
     * })
     * 后端：
     *      过滤器：
     *          1.得到用户名   前端访问时必须加 data.username=sessionStorage.getItem("username");
     *          后台才能通过 String username = req.getParameter("username");得到用户名
     *          2.判断当前用户是否已经登录，则需要登录成功时写入作用域session
     *          if ("success".equals(resultModel.getMsg())) {
     *             req.getSession().setAttribute(username, username);
     *         }
     *         3.判断：
     *         String result = (String) req.getSession().getAttribute(username);
     *             boolean isLogin = result != null;
     *             if (isLogin) {
     *                 System.out.println("登录成功");
     *                 chain.doFilter(req, resp);
     *             } else {
     *                 System.out.println("登录失败");
     *                 resp.sendRedirect("/html/login.html");
     *             }
     *          4.如果不需要判断，则直接放行
     *          chain.doFilter(req, resp);
     *
     */
    /**
     * 2021-10-9
     * 前端页面赋值
     * 1.每一个页面都应该有自己的js
     * 2.页面取值用ajax   后端传值如果有多个对象 jsonObject.put("navModelList", navModelList);
     * 3.上一条下一条
     * 4.可以进行点击菜系或者新闻板块
     * 5.分页 需要传三个参数  let data = {cuisineId: 0, page: 1, limit: 8};
     */
    /**
     * 2021-10-18 redis
     * 1.是什么？
     * 2.有什么用？可以在什么地方用？应用场景？
     * 3.为什么学？优势
     * 4.怎么用？
     *      1)基础 数据类型 语法结构 if
     *      2）数组，集合，面向对象
     * try catch  finally   finally里面的代码一定会执行？
     * redis和memcached,MongoDB的区别和使用场景?
     * Jedis jedis = new Jedis();
     *  注意：
     *      1）端口和地址
     *      2）需要手动或者自动删除key
     *
     */
    /**
     *
     * 2021-10-19
     * list  增刪改查
     * 关注关键字命令 中文意思
     *
     */
    /**
     * 面试一般常问那些？
     * 1.css选择器---jQuery  $("# . div")
     * 2.Flex 布局
     * ------------------------------
     * 1.servlet+jsp
     * 2.三层架构  service  dao     servlet
     * 3.MVC  model(javabean)  view (jsp ) controller(servlet)
     * 4.注解地址（api）接口地址，映射地址
     * 5.doget和dopost的区别？
     * 6.重定向和转发的区别？
     * 7.四大作用域？
     * 8.面向对象---
     *      三大特征---封装--继承--多态
     *      对象的组成？
     *      类的加载顺序？
     *      关键字？ 修饰符
     *      ----------
     *      抽象    接口
     *      重载与重写的区别？
     *      枚举和常量类
     *      引用类型的几个状态：强引用，弱引用，虚引用，软引用
     *      几个关键类：String Array List Date Object
     * ---------------------------------------------------------
     * 1.File 类
     * 2.StringBuilder 和其他的区别？
     * 3.字节流和字符流的区别？
     * 4.不要在自己的类里面写和自己不相干的代码
     * 5.封装的时候默认修饰符 private  尽量少提供public接口
     * -------------------------------------------------------
     * 1.数据库 ---查询（多表查询 ）
     * 2.验证码 ---大概原理
     * 3.js   jQuery  layui   随机，取整  for循环  赋值取值
     * 4.手写一个JDBC---url
     * 5.乱码处理
     * 6.数据动态赋值和静态赋值
     * 7.编辑----一定是根据id查询，要把查询的数据赋值到页面上---一定要id带入后台
     * 8.文件上传---io流，里面几个关键字----原理：地址存入哪里？
     * 9.富文本：{code：0,msg:'',count:11,data:{src:'',title:''}}
     * 10.session认证
     *
     */
    /**
     * 2021-10-20
     * 1.线程的实现方式有四种
     * 2.线程的创建线程的开启
     * 3.线程的名称设置
     * 4.线程的对象获取
     * 5.线程优先级
     * 6.优先级特性
     * 7.案例   -- -1；
     * 8.锁   两种锁
     * 9.死锁
     *
     */
    /**
     * 2021-10-21
     * finally和final和finalize的区别？
     * 线程加入join
     * 生产者和消费者模型
     * 定时器
     * ---------------------------
     * 测试工具：压力测试工具
     * JMeter
     * 1.每次需要访问的数量  5000
     * 2.每次访问的时间     1
     * 3.访问的次数    5
     *
     */
    public static void main(String[] args) {
//        File file=new File("");
//        try {
//            file.createNewFile();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        try {

//            1.文件是否存在 FileNotFoundException
//            2.NullPointException
//            3.ArrayIndexOutOfBoundsException
//            4.ArithmeticException
//            5.NumberFormatException
//            6.SQLException
//            7.IOException
//        finally一定会执行吗？不一定
//            String [] aa=null;
//            aa[0]="aa";
//            int a=10;
//            int b=a/0;
//            System.out.println("try开始");
//            String a="a";
//            Integer.parseInt(a);
//            System.out.println("try结束");
//        }catch (Exception e){
//        e.printStackTrace();
//            System.out.println("catch");
//        }finally {
//            System.out.println("finally");
//        }
//        String aa = new MyHelp().getAA();
//        System.out.println(aa);
    }

    private String getAA() {
// 虚拟机里面有一个缓冲
        try {
            System.out.println("try开始");
            String a = "a";
            a.length();
            Integer.parseInt(a);
            System.exit(0);
            System.out.println("try结束");
            return returntry();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("catch");
            return "return-catch";
        } finally {
            System.out.println("finally");
            return returnFinally();
        }

    }

    private String returntry() {
        System.out.println("1111");
        return "";
    }

    private String returnFinally() {
        System.out.println("2222");
        return "";
    }
}
